Analisis Sekuens menggunakan BioPython
Mempelajari dasar-dasar analisis sekuens DNA menggunakan library BioPython di Python.
Instalasi
Pastikan BioPython sudah terinstal sebelum memulai:
pip install biopython
Membuat Sekuens
Bio.Seq adalah kelas utama di BioPython untuk merepresentasikan urutan nukleotida DNA. Objek Seq dapat diperlakukan seperti string Python biasa, namun memiliki metode tambahan khusus analisis biologi.
Indexing & Pencarian
Untuk menemukan posisi basa tertentu dalam sekuens, gunakan .find() atau .index():
| Metode | Perilaku jika tidak ditemukan |
|---|---|
.find() | Mengembalikan -1 |
.index() | Melempar ValueError |
Gunakan
.find()jika kamu tidak yakin apakah pattern ada. Gunakan.index()jika kamu yakin ada dan ingin program berhenti jika tidak ditemukan.
Slicing
Mengambil bagian dari sekuens menggunakan notasi [start:stop:step]:
Menggabungkan Sekuens
Gunakan operator + untuk menggabungkan (konkatenasi) dua objek Seq:
Menemukan Kodon (nt_search)
nt_search() dari Bio.SeqUtils mengembalikan list berisi pattern diikuti semua indeks kemunculannya:
Perhatikan bahwa
nt_search()menerima string biasa, bukan objekSeq. Gunakanstr(seq)untuk konversi.
Frekuensi Nukleotida
Ada dua cara menghitung frekuensi basa dalam sekuens:
Visualisasi
Gunakan matplotlib untuk memvisualisasikan frekuensi basa sebagai bar chart:
Kode Lengkap
from Bio.Seq import Seq
# ── Membuat Sekuens ───────────────────────────────────────────────
seqA = Seq("ATGCATGC")
print(f'Sequence A: {seqA}')
# ── Indexing & Pencarian ──────────────────────────────────────────
print(f'5th Base: {seqA[4]}')
# Cara 1: .find() -> return -1 jika tidak ketemu
print(f'.find(): {seqA.find("T")}')
# Cara 2: .index() -> raise error jika tidak ketemu
print(f'.index(): {seqA.index("T")}')
# ── Slicing ───────────────────────────────────────────────────────
print(seqA)
print(f'First 5 bases: {seqA[:5]}')
print(f'Last 5 bases: {seqA[-5:]}')
print(f'Reversed: {seqA[::-1]}')
# ── Merge / Gabungkan Sekuens ─────────────────────────────────────
seqB = Seq("CTGAGATC")
seqC = seqA + seqB
print(f'Sequence A: {seqA}')
print(f'Sequence B: {seqB}')
print(f'Sequence C: {seqC}')
# ── Menemukan Kodon ───────────────────────────────────────────────
from Bio.SeqUtils import nt_search
print(f"ATG in Sequence A: {nt_search(str(seqA), 'ATG')}")
print(f"ATG in Sequence B: {nt_search(str(seqB), 'ATG')}")
# ── Frekuensi Nukleotida ──────────────────────────────────────────
from collections import Counter
counter_A = Counter(seqA)
print(f"Frequency Sequence A: {counter_A}")
freq_A = seqA.count('A')
freq_T = seqA.count('T')
freq_G = seqA.count('G')
freq_C = seqA.count('C')
print(freq_A, freq_T, freq_G, freq_C)
# ── Visualisasi ───────────────────────────────────────────────────
import matplotlib.pyplot as plt
plt.bar(counter_A.keys(), counter_A.values())
plt.title("Frequency Sequence A using Counter")
plt.show()
plt.bar(["A", "T", "G", "C"], [freq_A, freq_T, freq_G, freq_C])
plt.title("Frequency Sequence A using .count()")
plt.show()
Latihan
Diberikan dua sekuens berikut (masing-masing 48 bp):
seqA = Seq("AGCTTGCAGCGTCCGTTAGCTCGAGTCCAGGACGTTAGTCCTGCAGTC")
seqB = Seq("CAGTAAGTTGCCGTTAGCGCGTAGTGCCAGTAAGCGGCTCGTTAGTGG")
Kerjakan soal-soal berikut:
- Hitung panjang masing-masing sekuens
- Hitung total kemunculan motif
CGCpada kedua sekuens digabung - Temukan kemunculan pertama motif
CAGTCdi setiap sekuens - Buat sekuens baru: 15 basa pertama dari seqA + 10 basa terakhir dari seqB
- Balikkan urutan sekuens baru tersebut
- Hitung frekuensi basa dan visualisasikan dengan bar chart
Klik tab sesi1_latihan.py di file explorer di atas untuk melihat solusinya.
Ringkasan
| Fungsi | Deskripsi |
|---|---|
Seq() | Membuat objek sekuens DNA |
seqA[i] | Akses basa ke-i (0-based) |
.find(pat) | Cari posisi pattern (return -1 jika tidak ada) |
.index(pat) | Cari posisi pattern (raise error jika tidak ada) |
nt_search(str, pat) | Cari semua posisi pattern (dari BioPython) |
seq[start:stop] | Slicing sekuens |
seq[::-1] | Membalik sekuens |
seqA + seqB | Menggabungkan sekuens |
Counter(seq) | Frekuensi semua basa sekaligus |
.count(base) | Frekuensi satu basa |